/* 
 * File:   Servidor.h
 * Author: max
 *
 * Created on October 19, 2012, 12:31 AM
 */

#ifndef SERVIDOR_H
#define	SERVIDOR_H


#include <iostream>
#include <fstream>
#include <vector>
#include "Thread.h"
#include "Excepcion.h"
#include "Conexion.h"
#include "IManejadorSesionEvento.h"
#include "IManejadorConexionEvento.h"
#include "Sesion.h"
#include "Servicio.h"
#include "MotorJuego.h"
#include "Reloj.h"


using namespace std;
using namespace TP;
using namespace TP::Servicios;
using namespace TP::Threading;
using namespace TP::Comunicacion;
using namespace TP::Comunicacion::Eventos;
using namespace TP::Juego::Motorizacion;
using namespace TP::Juego::Motorizacion::Sincronizacion;

namespace TP { namespace Comunicacion {

    class Servidor : public IManejadorSesionEvento, public IManejadorConexionEvento {
        
    public:
        
        Servidor(const string& pPuerto, const string& pRutaDirectorioMundos);
        
        virtual ~Servidor();
        
        virtual void Iniciar() throw (Excepcion&);
        
        virtual void Finalizar() throw (Excepcion&);
        
        virtual void eventoNuevaSesion (IEnviante* pSesion, void* pArg);
        
        virtual void eventoErrorComunicacion (IEnviante* pEnviante, const string& pMensaje );
        
        virtual void eventoConexionFinalizada (IEnviante* pEnviante, const string& pMensaje);
        
        virtual void eventoErrorConexionInexistente (IEnviante* pConexion, const string& pMensaje);
        
    private:
        
        Conexion* _conexion;
        vector<Servicio*> _servicios;
        vector<Sesion*> _sesiones;
        MotorJuego* _motorJuego;
        Reloj* _relojJuego;
    };
}}


#endif	/* SERVIDOR_H */

